package com.ruoyi.system.domain;

import java.util.Date;
import java.util.List;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.core.domain.FileObject;
import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.common.enums.comlbs.ActivateStatusEnum;
import com.ruoyi.common.enums.comlbs.DataDictTypeEnum;
import com.ruoyi.common.utils.DictUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.system.service.ISysConfigService;
import com.ruoyi.system.service.ISysDeptService;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import lombok.experimental.Accessors;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import org.springframework.data.annotation.Transient;
import org.springframework.format.annotation.DateTimeFormat;

/**
 * 设备管理对象 t_equipment_management
 * 
 * @author wp
 * @date 2023-08-10
 */
@NoArgsConstructor
@AllArgsConstructor
@Data
@Accessors(chain = true)
@ToString
@TableName("t_equipment_management")
public class EquipmentManagement extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** id */
    @TableId(type = IdType.ASSIGN_ID)
    private Long id;

    @ApiModelProperty("所属公司id")
    private Long companyId;

    @ApiModelProperty("设备号")
    @Excel(name = "设备号")
    private String deviceId;

    /** SIM卡号 */
    @Excel(name = "SIM卡号")
    private String simId;

    /** 设备状态 0：未安装 1：已安装 2：初装 3：返修 */
    private Long equipmentStatus;

    /** 设备型号 */
    @Excel(name = "设备型号", dictType = "deviceModel")
    private Integer deviceModel;

    /** 设备类型 0：车载设备 1：人体佩戴设备 */
    private Integer equipmentType;

    /** 通道数 */
    private String channelsNum;

    /** 版本号 */
    private String versionNumber;

    /** 绑定状态 */
    private Integer bindStatus;

    /** 终端ID */
    private String terminalId;

    /** 厂商编码 */
    private String vendorCode;

    /** 运营商名称 */
    private String operatorName;

    /** 是否上传平台(0否1是) */
    private Long uploadPlatform;

    /** 数据上传的平台 */
    private String platformDetail;

    /** 设备位置 */
    private String position;

    /** 安装时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date installTime;

    /** 激活状态（0：未激活 1：已激活） */
    private Integer activateStatus;

    /** 激活时间（yyyy-MM-dd） */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date activateTime;

    /** 激活人id */
    private Long activateUserId;

    @ApiModelProperty("自检状态（0：未自检 1：自检通过 2：自检未通过）")
    private Integer checkStatus;

    /** 自检时间（yyyy-MM-dd HH:mm:ss） */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date checkTime;

    /** 自检详情（字典表配置） */
    private String checkDetail;

    /**
     * 更新设备激活状态
     * 激活状态判定（如果是添加到出厂待销售的公司中，则设为未激活，否则设为激活）
     * @param deptService
     */
    public void updateActivateStatus(ISysDeptService deptService){
        if (deptService.getWaitSaleCompany().getDeptId().equals(companyId)){
            //未激活
            activateStatus = ActivateStatusEnum.NOT_ACTIVATE.getCode();
        }else {
            //已激活
            activateStatus = ActivateStatusEnum.ACTIVATED.getCode();
            activateTime = new Date();
            activateUserId = SecurityUtils.getUserId();
        }
    }
}
